﻿using SSEG.UInterfaces;
using Presentacion.Clases.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Seg.Logica;
using Seg.Entidades;
using Presentacion.Clases;

namespace Presentacion.Controllers.Mantenimiento
{
    public class UsuarioController : Base
    {
        //
        // GET: /Usuario/

        public ActionResult Index()
        {
            Init(false);
            return View();
        }

        public JsonResult Actualizar(Usuario entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    UsuarioLogica servicio = new UsuarioLogica();
                    entidad.UsuarioModificacion = Constante.Auditoria.codigoAuditoria;
                    entidad.UsuarioWindow = new UIEncriptador().EncriptarCadena(entidad.UsuarioWindow);
                    entidad.Clave = new UIEncriptador().EncriptarCadena(entidad.Clave);

                    var doc = servicio.validarNumeroDocumentoEditar(entidad);
                    var usu = servicio.validarUsuarioEditar(entidad);
                    var flvalidar = true;

                    if (flvalidar && doc != 0)
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_NUMERO_DOCUMENTO;
                        flvalidar = false;
                    }
                    if (flvalidar && usu != 0)
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_VALIDAR_USUARIO;
                        flvalidar = false;
                    }
                    if (flvalidar)
                    {
                        servicio.Actualizar(entidad);
                        resultado.result = 1;
                        resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Actualizar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult Insertar(Usuario entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    UsuarioLogica servicio = new UsuarioLogica();
                    entidad.Clave = new UIEncriptador().EncriptarCadena(entidad.Clave);
                    entidad.UsuarioWindow = new UIEncriptador().EncriptarCadena(entidad.UsuarioWindow);

                    var usu = servicio.validarUsuario(entidad);
                    var doc = servicio.validarNumeroDocumento(entidad);
                    bool flvalidar = true;

                    if (usu != 0)
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_VALIDAR_USUARIO;
                        flvalidar = false;
                    }
                    if (flvalidar && doc != 0)
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_NUMERO_DOCUMENTO;
                        flvalidar = false;
                    }
                    if(flvalidar)
                    {
                        entidad.UsuarioCreacion = Constante.Auditoria.codigoAuditoria;
                        servicio.Insertar(entidad);
                        resultado.result = 1;
                        resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Insertar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ListarUsuarioJQGRID(string Nombre, decimal CodigoOficina, string anulado, string sidx, string sord, int page, int rows)
        {
            UsuarioLogica servicio = new UsuarioLogica();
            List<DTOUsuario> lst = new List<DTOUsuario>();

            var usuarios = servicio.ListarUsuarios(Nombre, CodigoOficina, anulado);

            usuarios.ForEach(c =>
            {
                DTOUsuario usuarioDTO = new DTOUsuario();
                var obj = c.CodigoParamDocumento != null ? new ParametroLogica().ObtenerRegistro(Constante.TablaParametro.TipoDocumento, c.CodigoParamDocumento.Value).para_vnombre_parametro : "--";
                usuarioDTO.CodigoUsuario = c.CodigoUsuario;
                usuarioDTO.CodigoParamDocumento = c.CodigoParamDocumento;
                usuarioDTO.TipoDocumento = obj;
                usuarioDTO.NumeroDocumento = c.NumeroDocumento;
                usuarioDTO.Nombre = c.Nombre;
                usuarioDTO.Materno = c.Materno;
                usuarioDTO.Paterno = c.Paterno;
                usuarioDTO.CorreoElectronico = c.CorreoElectronico;
                usuarioDTO.Anulado = c.Anulado;
                lst.Add(usuarioDTO);
            });

            var count = lst.Count();
            int pageIndex = page - 1;
            int pageSize = rows;
            int totalRecords = count;
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            var items = lst.Skip(pageIndex * pageSize).Take(pageSize);

            var result = new
            {
                total = totalPages,
                page,
                records = count,
                rows = (
                    from item in items
                    select new
                    {
                        id = item.CodigoUsuario,
                        cell = new string[] { 
                            item.CodigoUsuario.ToString(),
                            String.Format("{0}{1}{2}",item.Nombre,item.Paterno,item.Materno),
                            item.NumeroDocumento,
                            item.TipoDocumento,
                            item.CorreoElectronico,
                            Convert.ToString(item.Anulado == true ? "Inactivo" : "Activo") 
                        }
                    }).ToArray()
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        public JsonResult Eliminar(Usuario entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    UsuarioLogica servicio = new UsuarioLogica();
                    var result = servicio.Eliminar(entidad.CodigoUsuario);

                    if (result == 1)
                    {
                        resultado.result = 1;
                        resultado.message = Constante.MensajeGenerico.MSG_OK_ELIMINAR;
                    }
                    else
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_ELIMINAR;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Eliminar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult validarNumeroDocumento(Usuario entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    UsuarioLogica servicio = new UsuarioLogica();
                    var result = servicio.validarNumeroDocumento(entidad);

                    if (result == 0)
                    {
                        resultado.result = 1;
                    }
                    else
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_NUMERO_DOCUMENTO;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "validarNumeroDocumento", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult validarUsuario(Usuario entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    UsuarioLogica servicio = new UsuarioLogica();
                    var result = servicio.validarUsuario(entidad);

                    if (result == 0)
                    {
                        resultado.result = 1;
                    }
                    else
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_VALIDAR_USUARIO;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "validarUsuario", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ObtenerUsuario(Usuario entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    UsuarioLogica servicio = new UsuarioLogica();
                    DTOUsuario usuarioDTO = new DTOUsuario();

                    var usuario = servicio.ObtenerUsuario(entidad.CodigoUsuario);

                    usuarioDTO.CodigoUsuario = usuario.CodigoUsuario;
                    usuarioDTO.CodigoParamDocumento = usuario.CodigoParamDocumento;
                    usuarioDTO.NumeroDocumento = usuario.NumeroDocumento;
                    usuarioDTO.Nombre = usuario.Nombre;
                    usuarioDTO.Paterno = usuario.Paterno;
                    usuarioDTO.Materno = usuario.Materno;
                    usuarioDTO.DominioWindow = usuario.DominioWindow;
                    usuarioDTO.UsuarioWindow = new UIEncriptador().DesEncriptarCadena(usuario.UsuarioWindow);
                    usuarioDTO.CorreoElectronico = usuario.CorreoElectronico;
                    usuarioDTO.Anulado = usuario.Anulado;
                    usuarioDTO.Clave = new UIEncriptador().DesEncriptarCadena(usuario.Clave);

                    resultado.result = 1;
                    resultado.data = Json(usuarioDTO, JsonRequestBehavior.AllowGet);
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ObtenerUsuario", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult UsuarioAutoCompletar()
        {
            string descripcion = Request.QueryString["term"];
            var datos = new UsuarioLogica().UsuarioAutoCompletado(descripcion);

            List<DTOUsuario> usuarios = new List<DTOUsuario>();
            Resultado resultado = new Resultado();
            if (!isLogout(ref resultado))
            {
                datos.ForEach(c =>
                {
                    usuarios.Add(new DTOUsuario
                    {
                        Code = c.CodigoUsuario,
                        value = string.Format("{0}{1}{2}", c.Nombre, c.Paterno, c.Materno)
                    });
                });
            }
            return Json(usuarios, JsonRequestBehavior.AllowGet);
        }
    }
}
